package com.jiuye.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jiuye.common.GlobalConstant;
import com.jiuye.common.R;

import com.jiuye.entity.Category;
import com.jiuye.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 套餐、菜品添加
 *
 * @author likeWen
 * @since 2022/11/2 12:04
 */
@Slf4j
@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private ICategoryService categoryService;
    /**
     * 菜品添加分类
     */
    @GetMapping("/list")
    public R<List<Category>> list(Category category){
        //拼接查询条件
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        //type可能不会传递，所以需要判断type不是空的，在做拼接
        wrapper.eq(category.getType() != null,Category::getType,category.getType());
        //在这里使用链式编程的方式，来完成多个排序条件的拼接
        //sort 升序
        //修改时间 倒序 （提升用户的使用体验）
        //sql 升序 ASC
        //sql 倒序 DESC
        //sql写排序的方式 ORDER BY
        wrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);
        //查询分类
        List<Category> list = categoryService.list(wrapper);
        return R.success(list);
    }
    /**
     * 修改分类
     */
    @PutMapping
    public R<String> update(@RequestBody Category categoryParam) {
        // 参数校验
        // 方法返回
        this.categoryService.updateById(categoryParam);
        return R.success(GlobalConstant.SUCCESS);
    }
    /**
     * 删除分类
     */
    //在前端传回来的参数中 用/隔开的需要用注解接收，用？隔开的只需要参数接收
    @DeleteMapping
    public R<String> delete(Long id){
        log.info("删除分类，id --> {}",id);
        categoryService.deleteById(id);
        return R.success(GlobalConstant.SUCCESS);
    }
    /**
     * 分页控制
     */
    @GetMapping("/page")
    public R<Page<Category>> getPage(Integer page,Integer pageSize){
        log.info("前后端连通");
        Page<Category> queryPage = new Page<>(page,pageSize);
        //排序条件
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        //根据sort字段做升序
        //升序0->10
        //降序10->0
        wrapper.orderByAsc(Category::getSort);
        Page<Category> result = categoryService.page(queryPage, wrapper);
        //会把查询后的结果保存到分页对象中
        //我们也可以用返回值的方式来写
        //也可以直接用分页对象返回数据
        //categoryService.page(queryPage,wrapper);
        return R.success(result);


    }
    /**
     * 新增分类
     */
    //前端传回来的方法体需要用@RequestBody接收
    @PostMapping
    public R<String> save(@RequestBody Category categoryParam){
        log.info("前后端连通");
        //前端所有数据都不可信
        if (StringUtils.isBlank(categoryParam.getName()) ||
                (categoryParam.getSort()<0&&categoryParam.getSort()==null)
                || categoryParam.getType() == null){
            return R.error(GlobalConstant.FAILED);
        }
        boolean isFinished = categoryService.save(categoryParam);
        return isFinished?R.success(GlobalConstant.SUCCESS):R.success(GlobalConstant.FAILED);
    }
}
